package com.wing.file.factory;

import cn.hutool.core.util.ObjectUtil;
import com.wing.common.exception.BusinessException;
import com.wing.file.service.AbstractService;
import com.wing.file.service.MinIOFileStorageService;
import com.wing.file.service.TengXunFileService;
import com.wing.file.service.impl.MinIOFileStorageServiceImpl;
import com.wing.file.service.impl.TengXunFileServiceImpl;
import com.wing.file.util.FileType;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;

import javax.annotation.PostConstruct;
import java.util.HashMap;
import java.util.Map;

@Configuration
public class FileFactory {

//    @Autowired
//    private  Map<String, AbstractService> serviceMap = new HashMap<>();

    @Autowired
    private AbstractService tengXunFileServiceImpl;

    @Autowired
    private AbstractService minIOFileStorageServiceImpl;

    private Map<FileType, AbstractService> map = new HashMap<>();


    @PostConstruct
    public void init() {
        map.put(FileType.TENGXUN,  tengXunFileServiceImpl);
        map.put(FileType.MINIO,  minIOFileStorageServiceImpl);
    }

    public AbstractService getFileService(String fileType) throws Exception{
        if (StringUtils.isBlank(fileType)) {
            throw new BusinessException("不支持的存储类型");
        }

        return map.get(FileType.valueOf(fileType));
    }


    // 静态初始化块，用于扫描所有实现了 AbstractService 的类
//    static {
//        try {
//            // 你可以选择使用反射机制来扫描所有实现了 AbstractService 接口的类
//            // 这里假设我们已经手动添加了 ServiceA 和 ServiceB，或者通过其他扫描工具
//            registerService(new MinIOFileStorageServiceImpl());
//            registerService(new TengXunFileServiceImpl());
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//    }
//
//    // 注册 Service 到 Map 中
//    private static void registerService(AbstractService service) {
//        serviceMap.put(service.getFileType(), service);
//    }
//
//    // 获取 Service
//    public static AbstractService getFileService(FileType fileType) {
//       if (ObjectUtil.isEmpty(fileType)) {
//           throw new BusinessException("不支持的存储类型");
//        }
//        return serviceMap.get(fileType);
//    }



    ///**
    // * @Description 传入一个Class，可以避免输入错误的内容
    // */
    //public AbstractService create(Class clazz){
    //    if (null != clazz) {
    //        try {
    //            return (AbstractService) clazz.newInstance();
    //        } catch (Exception e) {
    //            e.printStackTrace();
    //        }
    //    }
    //    return null;
    //}

}
